package com.ruoyi.web.mapper;

import com.ruoyi.web.domain.UserCapital;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.List;

/**
 * 用户资金账户Mapper接口
 *
 * @author ruoyi
 * @date 2022-12-30
 */
@Component
public interface UserCapitalMapper {
    void updateUserBalance(@Param("num") BigDecimal num, @Param("userId") Long userId);

    /**
     * 查询用户资金账户
     *
     * @param id 用户资金账户主键
     * @return 用户资金账户
     */
    public UserCapital selectUserCapitalById(Long id);

    /**
     * 查询用户资金账户列表
     *
     * @param userCapital 用户资金账户
     * @return 用户资金账户集合
     */
    public List<UserCapital> selectUserCapitalList(UserCapital userCapital);

    /**
     * 新增用户资金账户
     *
     * @param userCapital 用户资金账户
     * @return 结果
     */
    public int insertUserCapital(UserCapital userCapital);

    /**
     * 修改用户资金账户
     *
     * @param userCapital 用户资金账户
     * @return 结果
     */
    public int updateUserCapital(UserCapital userCapital);

    /**
     * 删除用户资金账户
     *
     * @param id 用户资金账户主键
     * @return 结果
     */
    public int deleteUserCapitalById(Long id);

    /**
     * 批量删除用户资金账户
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteUserCapitalByIds(Long[] ids);

    /**
     * 增加额度
     *
     * @param userId 用户id
     * @param amount 额度
     * @return {@link int}
     * @since 2023/3/17 14:55
     */
    int addBalance(@Param("userId") Long userId,
                   @Param("amount") BigDecimal amount);

    /**
     * 减少额度
     *
     * @param userId 用户id
     * @param amount 额度
     * @return {@link int}
     * @since 2023/3/17 14:55
     */
    int minusBalance(@Param("userId") Long userId,
                     @Param("amount") BigDecimal amount);

    /**
     * 增加VIP押金额度
     *
     * @param userId 用户id
     * @param amount 额度
     * @return {@link int}
     * @since 2023/3/17 14:55
     */
    int addVipDeposit(@Param("userId") Long userId,
                      @Param("amount") BigDecimal amount);

    /**
     * 减少VIP押金额度
     *
     * @param userId 用户id
     * @param amount 额度
     * @return {@link int}
     * @since 2023/3/17 14:55
     */
    int minusVipDeposit(@Param("userId") Long userId,
                        @Param("amount") BigDecimal amount);

    /**
     * 根据userIdList查询
     *
     * @param userIdList 用户idList
     * @param condition  查询条件
     * @return {@link List< UserCapital>}
     * @since 2023/4/4 12:51
     */
    List<UserCapital> listByUserIdList(@Param("userIdList") List<Long> userIdList,
                                       @Param("condition") UserCapital condition);
}
